/*
 * EntityManager.cpp
 *
 *  Created on: Nov 7, 2013
 *      Author: ruben
 */

#include "EntityManager.h"
#include <stdio.h>

EntityManager::EntityManager() {
	userManager = new UserManager();
	categoryManager = new CategoryManager();
	serviceManager = new ServiceManager();
	quoteRequestManager = new QuoteRequestManager();
	consultationManager = new ConsultationManager();
}

EntityManager::~EntityManager() {
	delete userManager;
	delete categoryManager;
	delete serviceManager;
	delete quoteRequestManager;
	delete consultationManager;
}

int EntityManager::eliminarUsuario(int identifier) {
	userManager->eliminar(identifier);
	return 0;
}

int EntityManager::lookingForUserIdentifier(int identifier, char *pass) {
	int res = userManager->buscarIDyVerificarDatos(identifier, pass);
	return res;
}

int EntityManager::createUser(int dni,char *name, char *lastName, char *email, char *password, char *province, char type) {
	//printf("creaste usuario dni %d, name %s lastName %s email %s pass %s province %s",dni, name,lastName,email,password,province);
	if( userManager->crear(dni, name, lastName, email, password, province, type) )
		return 0;
	return 1;
}

int EntityManager::modifyUser(int identifier, int newDNI,char *name, char *lastName, char *email, char *password, char* province) {
	if( userManager->modificar(identifier, name, lastName, email, password, province) )
		return 0;
	return 1;
}

//1:user, 2:provider, 3:admin
int EntityManager::loginUser(char *name, char *pass) {
	return 0;
}

int EntityManager::changeUserToProvider(int identifier) {
	//buscar usuario
	//cambiar su typo a 'P'
	return 0;
}

// provider
int EntityManager::createService(int providerIdentifier,char *name, char *description, char *type) {
	//crea el servicio, si pudo retorna 0 sino 1
	if ( serviceManager->crear(providerIdentifier, name, description, type) )
		return 0;
	return 1;
}

int EntityManager::lookingForServiceByIdentifier(int identifier) {
	//buiscar el servicio por identificador
	if( serviceManager->buscar(identifier) )
		return 0;
	return 1;
}

int EntityManager::deleteServiceByIdentifier(int identifier) {
	//buscar el servicio y eliminarlo encaso de no poder retornar 1
	if ( serviceManager->eliminar(identifier) )
		return 0;
	return 1;
}

int EntityManager::lookingForConsultingByIdentifier(int identifier) {
	//busca la cunsulta si no la encuentra retorna 1, sino 0
	if( consultationManager->buscar(identifier) )
		return 0;
	return 1;
}

int EntityManager::createConsulting(int userID, int serviceID, char *consulting) {
	//crea una consulta y devuelve 0; sino 1
	if( consultationManager->crear(userID, serviceID, consulting) )
		return 0;
	return 1;
}

int EntityManager::updateConsultingWith(int consultingID, char *answer) {
	consultationManager->responder(consultingID, answer);
	return 0;
}

int EntityManager::lookingForUserByIdentifier(int identifier, char *pass, int type) {
	if( userManager->buscarIDyVerificarTipo(identifier, pass, type) )
		return 0;
	return 1;
}

int EntityManager::changeUserToAdministrator(int identifier) {
	//cambar el typo de usuario a administrador y gaurdar cambios en el arbol
	if ( userManager->crearUsuarioAdmin(identifier) )
		return 0;
	return 1;
}

int EntityManager::deleteUserAdministrator(int identifier) {
	//dar de baja al usuaroi como admisitrador a usuario y luego cambiar los cambios
	userManager->eliminarUsuarioAdmin(identifier);
	return 0;
}
//category
int EntityManager::createCategory(char *name, char *category) {
	//crear categoria retorna 0 si se creo satisfactoriamente sino 1
	if( categoryManager->crear(name, category) )
		return 0;
	return 1;
}

int EntityManager::createCategoryByFile(char *filePath) {
	//crea las catoegorias en base a la direccion de un archivio y las persiste
	//si puedo crear retorna 0 sino 1
	if( categoryManager->crear(filePath) )
		return 0;
	return 1;
}

int EntityManager::lookingForCategory(int *identifier) {
	//si encuentra la categoria devuelve el identificador y retorna 0, sino retorna 1
	if( categoryManager->buscar(identifier) )
			return 0;
	*identifier = -1;
	return 1;
}

int EntityManager::modifyCategory(int identifier, char *name, char *description) {
	//modifica la categoria buscada por idenfier y retorna 0, sino 1
	if( categoryManager->modificar(identifier, name, description) )
		return 0;
	return 1;
}

int EntityManager::deleteCategory(int categoryID) {
	//borra una cateoria y retorna 0, sino pudo hacerlo retorna 1
	if( categoryManager->borrar(categoryID) )
		return 0;
	return 1;
}

int EntityManager::hideConsulting(int identifier) {
	//oculta la consulta buscada por identificador y retorna 0, sino retorna 1
	return 0;
}

int EntityManager::recoverPasswordUserByIdentier(int userIdentifier, char *password) {
	//busca el usuario por identifier y lo devuelve ademas retorna 0, sino retorna 1
	String pass(password);
	if(userManager->recuperarPassword(userIdentifier, pass) )
		return 0;
	//strcpy(password,"holache");
	return 1;
}
